aboutsummaryrefslogtreecommitdiffstats
path: root/web/pages/tracks/[slug].vue
blob: 9e1881d4fe8e986bfa3305a0dc76995972fa2e45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<script setup lang="ts">
import { TrainTrack } from 'lucide-vue-next';
import { useScheduleStore } from '~/stores/schedule';

definePageMeta({
  middleware: ['logged-in', 'conference-selected']
})

const route = useRoute();
const scheduleStore = useScheduleStore();

const track = scheduleStore.schedule?.tracks.find((track) => track.slug === route.params.slug);
</script>

<template>
  <div v-if="scheduleStore.status === 'pending'" class="loading">
    <span class="loading-text">
      <Spinner color="var(--color-text-muted)" />Updating schedule...
    </span>
  </div>
  <Panel v-if="track" :title="track.name" :breadcrumbs="[{ text: 'Tracks', to: '/tracks' }]" :icon="TrainTrack">
    <ul class="events-list">
      <li 
        v-for="event in scheduleStore.eventsPerTrack[track.name]" 
        :key="event.id" 
        class="event-item"
      >
        <EventListing :event="event" />
      </li>
    </ul>
  </Panel>
</template>

<style>
.events-list {
  list-style: none;
  margin: -1rem 0;
  padding: 0;
  display: grid;
}

.event-item {
  border-bottom: 1px solid var(--color-background-muted); 
}

.events-title {
  margin-bottom: 1rem;
}

.event-item:last-child {
  border-bottom: none; 
}

</style>